﻿#ifndef WRWORKTCPCOMMSERVEROBJECT_H
#define WRWORKTCPCOMMSERVEROBJECT_H

#include "WRWorkTcpCommServerObjRef.h"
#include "WRWorkTcpCommServerSession.h"
#include "../../WRSoft-Utility/Structs/WRArray.h"

#include <QMutex>

//声明工作TCP通讯服务器事务。
class WRWorkTcpCommServerAffair;
//声明工作TCP通讯服务器接口。
class WRWorkTcpCommServerInterface;

//表示工作TCP通讯服务器对象。
class WRSOFT_WORKING_COMMON_CLASS WRWorkTcpCommServerObject
{
    friend class WRWorkTcpCommServerSession;

private:
    typedef WRWorkTcpCommServerAffair* Affair;
    typedef WRArray<Affair> Affars;
    typedef WRWorkTcpCommServerInterface* Interface;
    typedef WRArray<Interface> Interfaces;

    QMutex m_mutex;
    WRWorkTcpCommServerSession* m_owner;
    WRWorkTcpCommServerObjRef* m_target;
    Affars m_affairs;
    Interfaces m_interfaces;

    //初始化工作TCP通讯服务器对象。
    WRWorkTcpCommServerObject(WRWorkTcpCommServerSession* owner, WRWorkTcpCommServerObjRef* target);
    //清理当前对象所占用的相关资源。
    ~WRWorkTcpCommServerObject(void);

public:
    //添加对象引用。
    inline void addRef(void)
    {
        m_owner->addRef();
    }
    //释放对象引用, 如果引用计数为0，则删除对象，返回True，否则返回False。
    inline bool release(void)
    {
        return m_owner->release();
    }

    //获取所有者。
    inline WRWorkTcpCommServerSession* owner(void) const
    {
        return m_owner;
    }
    //获取索引号。
    inline int index(void) const
    {
        return m_target->index();
    }
    //获取目标对象。
    inline WRWorkTcpCommServerObjRef* target(void) const
    {
        return m_target;
    }

    //创建指定的事件。
    WRWorkTcpCommServerAffair* createAffair(WRWorkAffair* target);
    //删除指定的事务。
    void deleteAffair(int index);

    //执行关闭处理。
    void shutdown(void);

    //处理接收到数据。
    void procData(const unsigned char* buf, int len);
    //发送数据。
    inline bool sendData(WRDataPacket* packet)
    {
        return m_owner->sendData(packet);
    }
};

#endif // WRWORKTCPCOMMSERVEROBJECT_H
